package com.silence.springboot.vo.input;

import com.silence.springboot.interfaces.CreateUserChecks;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;

/**
 * 用户基础信息表 输入类。
 */
@Data
@Accessors(chain = true)
@Schema(name = "UserBaseInfoInput", description = "用户基础信息表类")
public class UserBaseInfoInput implements Serializable {

    /**
     * 序列号
     */
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @Schema(description = "主键ID")
    private String id;

    /**
     * 用户名
     */
    @NotBlank(groups = CreateUserChecks.class, message = "用户名不能为空")
    @Size(max = 20, message = "用户名不能超过50个字符")
    @Schema(description = "用户名")
    private String username;

    /**
     * 密码
     */
    @NotBlank(groups = CreateUserChecks.class, message = "密码不能为空")
    @Size(max = 100, message = "密码不能超过100个字符")
    @Schema(description = "密码")
    private String password;

    /**
     * 姓名
     */
    @Size(max = 50, message = "姓名不能超过50个字符")
    @NotBlank(message = "姓名不能为空")
    @Schema(description = "姓名")
    private String name;

    /**
     * 性别（1：男 2：女 3：未知）
     */
    @Size(max = 1, message = "性别（1：男 2：女）不能超过1个字符")
    @NotBlank(message = "性别不能为空")
    @Pattern(regexp = "^[1-2]$", message = "性别（1：男 2：女）只能输入1-2")
    @Schema(description = "性别（1：男 2：女）")
    private String sex;

    /**
     * 年龄
     */
    @Size(max = 3, message = "年龄不能超过3个字符")
    @NotBlank(message = "年龄不能为空")
    @Pattern(regexp = "^[0-9]*$", message = "年龄只能输入数字")
    @Schema(description = "年龄")
    private String age;

    /**
     * 学号
     */
    @Size(max = 20, message = "学号不能超过20个字符")
    @NotBlank(message = "学号不能为空")
    @Schema(description = "学号")
    private String studentNumber;

    /**
     * 学院
     */
    @Size(max = 100, message = "学院不能超过100个字符")
    @Schema(description = "学院")
    private String college;

    /**
     * 专业
     */
    @Size(max = 100, message = "专业不能超过100个字符")
    @Schema(description = "专业")
    private String major;

    /**
     * 班级
     */
    @Size(max = 100, message = "班级不能超过100个字符")
    @Schema(description = "班级")
    private String grade;

    /**
     * 身份证号
     */
    @Size(max = 20, message = "身份证号不能超过20个字符")
    @NotBlank(message = "身份证号不能为空")
    @Pattern(regexp = "^[0-9]*$", message = "身份证号只能输入数字")
    @Schema(description = "身份证号")
    private String idCard;

    /**
     * 手机号
     */
    @Size(max = 20, message = "手机号不能超过11个字符")
    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^[0-9]*$", message = "手机号只能输入数字")
    @Schema(description = "手机号")
    private String phone;

    /**
     * 邮箱
     */
    @Size(max = 50, message = "邮箱不能超过50个字符")
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    @Schema(description = "邮箱")
    private String email;

    /**
     * 生日
     */
    @Size(max = 19, message = "生日不能超过20个字符")
    @NotBlank(message = "生日不能为空")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", message = "生日日期格式不正确（yyyy-MM-dd HH:mm:ss）")
    @Schema(description = "生日")
    private String birthday;

    /**
     * 入学时间
     */
    @Size(max = 19, message = "入学时间不能超过20个字符")
    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", message = "入学时间格式不正确（yyyy-MM-dd HH:mm:ss）")
    @Schema(description = "入学时间")
    private String enterTime;

    /**
     * 地址
     */
    @Size(max = 255, message = "地址不能超过255个字符")
    @NotBlank(message = "地址不能为空")
    @Schema(description = "地址")
    private String address;

    /**
     * 登录token
     */
    @NotBlank(message = "token 不能为空")
    @Schema(description = "登录token")
    private String token;

}
